package org.supda.system.dao;

import java.io.Serializable;
import java.util.List;

import org.supda.system.entity.TUser;
import org.supda.system.util.DataTablePageUtil;
import org.supda.system.util.PageUtil;

/**
 * 
 * @author supda
 * @Date 2016-12-14 下午4:41:49
 *
 * @param <T>
 */
public interface BaseDao<T> {
    /** 
     * 保存一个对象 
     *  
     * @param o 
     * @return 
     */  
     Serializable save(T o);  
  
    /** 
     * 删除一个对象 
     *  
     * @param o 
     */  
     void delete(T o);  
  
    /** 
     * 更新一个对象 
     *  
     * @param o 
     */  
     void update(T o);  
  
    /** 
     * 保存或更新对象 
     *  
     * @param o 
     */  
     void saveOrUpdate(T o);  
  
    /** 
     * 查询 
     *  
     * @param hql 
     * @return 
     */  
     List<T> find(String hql);  
  
    /** 
     * 查询集合 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     List<T> find(String hql, Object[] param);
     
     /**
      * 反射查询所有用户信息
      * @param o
      * @return
      */
     List<T> findByWhere(T o) throws Exception ;
  
    /** 
     * 查询集合 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     List<T> find(String hql, List<Object> param);  
  
    /** 
     * 查询集合(带分页) 
     *  
     * @param hql 
     * @param param 
     * @param page 
     *            查询第几页 
     * @param rows 
     *            每页显示几条记录 
     * @return 
     */  
     List<T> find(String hql, Object[] param, Integer page, Integer rows);  
  
    /** 
     * 查询集合(带分页) 
     *  
     * @param hql 
     * @param param 
     * @param page 
     * @param rows 
     * @return 
     */  
     List<T> find(String hql, List<Object> param, Integer page, Integer rows);  
  
    /** 
     * 获得一个对象 
     *  
     * @param c 
     *            对象类型 
     * @param id 
     * @return Object 
     */  
    public T get(Class<T> c, Serializable id);  
  
    /** 
     * 获得一个对象 
     *  
     * @param hql 
     * @param param 
     * @return Object 
     */  
    public T get(String hql, Object[] param);  
  
    /** 
     * 获得一个对象 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     T get(String hql, List<Object> param);  
  
    /** 
     * select count(*) from 类 
     *  
     * @param hql 
     * @return 
     */  
     Long count(String hql);  
  
    /** 
     * select count(*) from 类 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     Long count(String hql, Object[] param);  
  
    /** 
     * select count(*) from 类 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     Long count(String hql, List<Object> param);  
  
    /** 
     * 执行HQL语句 
     *  
     * @param hql 
     * @return 响应数目 
     */  
     Integer executeHql(String hql);  
  
    /** 
     * 执行HQL语句 
     *  
     * @param hql 
     * @param param 
     * @return 响应数目 
     */  
     Integer executeHql(String hql, Object[] param);  
  
    /** 
     * 执行HQL语句 
     *  
     * @param hql 
     * @param param 
     * @return 
     */  
     Integer executeHql(String hql, List<Object> param);  
     
     /**
      * 分页查询,默认分页，不包含任何查询条件
      * @param page
      * @return
      */
      PageUtil listByPage(PageUtil page, T o); 
      
      
      /**
       * DataTables分页
       * @param dtp
       * @return
       */
    	void listByDataTable(DataTablePageUtil<T> dtp , Class<T> t);
  
}
